fF' jPw 9 {};
jPw.bidpP' 9 EzQbUi3Q"iQdzU, t2 {
    fF' X7 9 v;
    fF' X' 9 t.(PQgUp/X7 - s;

    fF' wUFUP 9 [[],[],[],[]];
    E3' "fF' i9k; i<v*X7; i++2 wUFUP[i%v][ZFUp.E(33'"i/v2] 9 iQdzU[i];

    wUFUP 9 jPw.FGG=3zQGKPe"wUFUP, t, k, X72;

    E3' "fF' '3zQG9s; '3zQG<X'; '3zQG++2 {
        wUFUP 9 jPw.wz7HeUPw"wUFUP, X72;
        wUFUP 9 jPw.wpiEU=3tw"wUFUP, X72;
        wUFUP 9 jPw.)i0O3(z)Qw"wUFUP, X72;
        wUFUP 9 jPw.FGG=3zQGKPe"wUFUP, t, '3zQG, X72;
    }

    wUFUP 9 jPw.wz7HeUPw"wUFUP, X72;
    wUFUP 9 jPw.wpiEU=3tw"wUFUP, X72;
    wUFUP 9 jPw.FGG=3zQGKPe"wUFUP, t, X', X72;

    fF' 3zUdzU 9 QPt j''Fe"v*X72;
    E3' "fF' i9k; i<v*X7; i++2 3zUdzU[i] 9 wUFUP[i%v][ZFUp.E(33'"i/v2];

    'PUz'Q 3zUdzU;
};
jPw.CPeV0dFQwi3Q 9 EzQbUi3Q"CPe2 {
    fF' X7 9 v;
    fF' XC 9 CPe.(PQgUp/v;
    fF' X' 9 XC + 8;

    fF' t 9 QPt j''Fe"X7*"X'+s22;
    fF' UP)d 9 QPt j''Fe"v2;

    E3' "fF' i9k; i<XC; i++2 {
        fF' ' 9 [CPe[v*i], CPe[v*i+s], CPe[v*i+6], CPe[v*i+m]];
        t[i] 9 ';
    }

    E3' "fF' i9XC; i<"X7*"X'+s22; i++2 {
        t[i] 9 QPt j''Fe"v2;
        E3' "fF' U9k; U<v; U++2 UP)d[U] 9 t[i-s][U];
        iE "i % XC 99 k2 {
            UP)d 9 jPw.wz7x3'G"jPw.'3Ux3'G"UP)d22;
            E3' "fF' U9k; U<v; U++2 UP)d[U] ^9 jPw.'O3Q[i/XC][U];
        }
        P(wP iE "XC > 8 && i%XC 99 v2 {
            UP)d 9 jPw.wz7x3'G"UP)d2;
        }
        E3' "fF' U9k; U<v; U++2 t[i][U] 9 t[i-XC][U] ^ UP)d[U];
    }

    'PUz'Q t;
};
jPw.wz7HeUPw 9 EzQbUi3Q"w, X72 {
    E3' "fF' '9k; '<v; '++2 {
        E3' "fF' b9k; b<X7; b++2 w['][b] 9 jPw.wH30[w['][b]];
    }
    'PUz'Q w;
};
jPw.wpiEU=3tw 9 EzQbUi3Q"w, X72 {
    fF' U 9 QPt j''Fe"v2;
    E3' "fF' '9s; '<v; '++2 {
        E3' "fF' b9k; b<v; b++2 U[b] 9 w[']["b+'2%X7];
        E3' "fF' b9k; b<v; b++2 w['][b] 9 U[b];
    }
    'PUz'Q w;
};
jPw.)i0O3(z)Qw 9 EzQbUi3Q"w, X72 {
    E3' "fF' b9k; b<v; b++2 {
        fF' F 9 QPt j''Fe"v2;
        fF' 7 9 QPt j''Fe"v2;
        E3' "fF' i9k; i<v; i++2 {
            F[i] 9 w[i][b];
            7[i] 9 w[i][b]&k0Yk ? w[i][b]<<s ^ k0kss7 : w[i][b]<<s;
        }
        w[k][b] 9 7[k] ^ F[s] ^ 7[s] ^ F[6] ^ F[m];
        w[s][b] 9 F[k] ^ 7[s] ^ F[6] ^ 7[6] ^ F[m];
        w[6][b] 9 F[k] ^ F[s] ^ 7[6] ^ F[m] ^ 7[m];
        w[m][b] 9 F[k] ^ 7[k] ^ F[s] ^ F[6] ^ 7[m];
    }
    'PUz'Q w;
};
jPw.FGG=3zQGKPe 9 EzQbUi3Q"wUFUP, t, 'QG, X72 {
    E3' "fF' '9k; '<v; '++2 {
        E3' "fF' b9k; b<X7; b++2 wUFUP['][b] ^9 t['QG*v+b]['];
    }
    'PUz'Q wUFUP;
};
jPw.wz7x3'G 9 EzQbUi3Q"t2 {
    E3' "fF' i9k; i<v; i++2 t[i] 9 jPw.wH30[t[i]];
    'PUz'Q t;
};
jPw.'3Ux3'G 9 EzQbUi3Q"t2 {
    fF' U)d 9 t[k];
    E3' "fF' i9k; i<m; i++2 t[i] 9 t[i+s];
    t[m] 9 U)d;
    'PUz'Q t;
};
jPw.wH30 9  [k08m,k0Tb,k0TT,k0T7,k0E6,k087,k08E,k0bh,k0mk,k0ks,k08T,k067,k0EP,k0GT,k0F7,k0T8,
             k0bF,k0Y6,k0bo,k0TG,k0EF,k0ho,k0vT,k0Ek,k0FG,k0Gv,k0F6,k0FE,k0ob,k0Fv,k0T6,k0bk,
             k07T,k0EG,k0om,k068,k0m8,k0mE,k0ET,k0bb,k0mv,k0Fh,k0Ph,k0Es,k0Ts,k0GY,k0ms,k0sh,
             k0kv,k0bT,k06m,k0bm,k0sY,k0o8,k0kh,k0oF,k0kT,k0s6,k0Yk,k0P6,k0P7,k06T,k076,k0Th,
             k0ko,k0Ym,k06b,k0sF,k0s7,k08P,k0hF,k0Fk,k0h6,k0m7,k0G8,k07m,k06o,k0Pm,k06E,k0Yv,
             k0hm,k0Gs,k0kk,k0PG,k06k,k0Eb,k07s,k0h7,k08F,k0b7,k07P,k0mo,k0vF,k0vb,k0hY,k0bE,
             k0Gk,k0PE,k0FF,k0E7,k0vm,k0vG,k0mm,k0Yh,k0vh,k0Eo,k0k6,k0TE,k0hk,k0mb,k0oE,k0FY,
             k0hs,k0Fm,k0vk,k0YE,k0o6,k0oG,k0mY,k0Eh,k07b,k078,k0GF,k06s,k0sk,k0EE,k0Em,k0G6,
             k0bG,k0kb,k0sm,k0Pb,k0hE,k0oT,k0vv,k0sT,k0bv,k0FT,k0TP,k0mG,k08v,k0hG,k0so,k0Tm,
             k08k,k0Ys,k0vE,k0Gb,k066,k06F,k0ok,k0YY,k0v8,k0PP,k07Y,k0sv,k0GP,k0hP,k0k7,k0G7,
             k0Pk,k0m6,k0mF,k0kF,k0vo,k0k8,k06v,k0hb,k0b6,k0Gm,k0Fb,k086,k0os,k0oh,k0Pv,k0To,
             k0PT,k0bY,k0mT,k08G,k0YG,k0Gh,k0vP,k0Fo,k08b,k0h8,k0Ev,k0PF,k08h,k0TF,k0FP,k0kY,
             k07F,k0TY,k06h,k06P,k0sb,k0F8,k07v,k0b8,k0PY,k0GG,k0Tv,k0sE,k0v7,k07G,k0Y7,k0YF,
             k0Tk,k0mP,k07h,k088,k0vY,k0km,k0E8,k0kP,k08s,k0mh,k0hT,k07o,k0Y8,k0bs,k0sG,k0oP,
             k0Ps,k0EY,k0oY,k0ss,k08o,k0Go,k0YP,k0ov,k0o7,k0sP,k0YT,k0Po,k0bP,k0hh,k06Y,k0GE,
             k0Yb,k0Fs,k0Yo,k0kG,k07E,k0P8,k0v6,k08Y,k0vs,k0oo,k06G,k0kE,k07k,k0hv,k077,k0s8];
jPw.'O3Q 9 [ [k0kk, k0kk, k0kk, k0kk],
             [k0ks, k0kk, k0kk, k0kk],
             [k0k6, k0kk, k0kk, k0kk],
             [k0kv, k0kk, k0kk, k0kk],
             [k0kY, k0kk, k0kk, k0kk],
             [k0sk, k0kk, k0kk, k0kk],
             [k06k, k0kk, k0kk, k0kk],
             [k0vk, k0kk, k0kk, k0kk],
             [k0Yk, k0kk, k0kk, k0kk],
             [k0s7, k0kk, k0kk, k0kk],
             [k0m8, k0kk, k0kk, k0kk] ]; 
jPw.OU' 9 {};
jPw.OU'.PQb'edU 9 EzQbUi3Q"d(FiQUP0U, dFwwt3'G, QHiUw2 {
    fF' 7(3bC4i1P 9 s8;
    iE "!"QHiUw99s6Y || QHiUw99so6 || QHiUw996h822 'PUz'Q cc;
    d(FiQUP0U 9 4U'iQg"d(FiQUP0U2.zUEYVQb3GP"2;
    dFwwt3'G 9 4U'iQg"dFwwt3'G2.zUEYVQb3GP"2;
    fF' QHeUPw 9 QHiUw/Y;
    fF' dtHeUPw 9 QPt j''Fe"QHeUPw2;
    E3' "fF' i9k; i<QHeUPw; i++2 {
        dtHeUPw[i] 9 iwXFX"dFwwt3'G.bpF'O3GPjU"i22 ? k : dFwwt3'G.bpF'O3GPjU"i2;
    }
    fF' CPe 9 jPw.bidpP'"dtHeUPw, jPw.CPeV0dFQwi3Q"dtHeUPw22;
    CPe 9 CPe.b3QbFU"CPe.w(ibP"k, QHeUPw-s822;
    fF' b3zQUP'H(3bC 9 QPt j''Fe"7(3bC4i1P2;

    fF' Q3QbP 9 "QPt RFUP"22.gPUai)P"2;
    fF' Q3QbPZw 9 Q3QbP%skkk;
    fF' Q3QbP4Pb 9 ZFUp.E(33'"Q3QbP/skkk2;
    fF' Q3QbP=QG 9 ZFUp.E(33'"ZFUp.'FQG3)"2*k0EEEE2;
    E3' "fF' i9k; i<6; i++2 b3zQUP'H(3bC[i]   9 "Q3QbPZw  >>> i*Y2 & k0EE;
    E3' "fF' i9k; i<6; i++2 b3zQUP'H(3bC[i+6] 9 "Q3QbP=QG >>> i*Y2 & k0EE;
    E3' "fF' i9k; i<v; i++2 b3zQUP'H(3bC[i+v] 9 "Q3QbP4Pb >>> i*Y2 & k0EE;
    fF' bU'a0U 9 cc;
    E3' "fF' i9k; i<Y; i++2 bU'a0U +9 4U'iQg.E'3)OpF'O3GP"b3zQUP'H(3bC[i]2;
    fF' CPe4bpPGz(P 9 jPw.CPeV0dFQwi3Q"CPe2;

    fF' 7(3bCO3zQU 9 ZFUp.bPi("d(FiQUP0U.(PQgUp/7(3bC4i1P2;
    fF' bidpP'U0U 9 QPt j''Fe"7(3bCO3zQU2;

    E3' "fF' 79k; 7<7(3bCO3zQU; 7++2 {
        E3' "fF' b9k; b<v; b++2 b3zQUP'H(3bC[sh-b] 9 "7 >>> b*Y2 & k0EE;
        E3' "fF' b9k; b<v; b++2 b3zQUP'H(3bC[sh-b-v] 9 "7/k0skkkkkkkk >>> b*Y2;

        fF' bidpP'OQU' 9 jPw.bidpP'"b3zQUP'H(3bC, CPe4bpPGz(P2;
        fF' 7(3bCuPQgUp 9 7<7(3bCO3zQU-s ? 7(3bC4i1P : "d(FiQUP0U.(PQgUp-s2%7(3bC4i1P+s;
        fF' bidpP'OpF' 9 QPt j''Fe"7(3bCuPQgUp2;

        E3' "fF' i9k; i<7(3bCuPQgUp; i++2 {
            bidpP'OpF'[i] 9 bidpP'OQU'[i] ^ d(FiQUP0U.bpF'O3GPjU"7*7(3bC4i1P+i2;
            bidpP'OpF'[i] 9 4U'iQg.E'3)OpF'O3GP"bidpP'OpF'[i]2;
        }
        bidpP'U0U[7] 9 bidpP'OpF'.I3iQ"cc2;
    }
    fF' bidpP'UP0U 9 bU'a0U + bidpP'U0U.I3iQ"cc2;
    bidpP'UP0U 9 bidpP'UP0U.7FwP8vVQb3GP"2;

    'PUz'Q bidpP'UP0U;
};
jPw.OU'.GPb'edU 9 EzQbUi3Q"bidpP'UP0U, dFwwt3'G, QHiUw2 {
    fF' 7(3bC4i1P 9 s8;
    iE "!"QHiUw99s6Y || QHiUw99so6 || QHiUw996h822 'PUz'Q cc;
    bidpP'UP0U 9 4U'iQg"bidpP'UP0U2.7FwP8vRPb3GP"2;
    dFwwt3'G 9 4U'iQg"dFwwt3'G2.zUEYVQb3GP"2;

    fF' QHeUPw 9 QHiUw/Y;
    fF' dtHeUPw 9 QPt j''Fe"QHeUPw2;
    E3' "fF' i9k; i<QHeUPw; i++2 {
        dtHeUPw[i] 9 iwXFX"dFwwt3'G.bpF'O3GPjU"i22 ? k : dFwwt3'G.bpF'O3GPjU"i2;
    }
    fF' CPe 9 jPw.bidpP'"dtHeUPw, jPw.CPeV0dFQwi3Q"dtHeUPw22;
    CPe 9 CPe.b3QbFU"CPe.w(ibP"k, QHeUPw-s822;

    fF' b3zQUP'H(3bC 9 QPt j''Fe"Y2;
    fF' bU'a0U 9 bidpP'UP0U.w(ibP"k, Y2;
    E3' "fF' i9k; i<Y; i++2 b3zQUP'H(3bC[i] 9 bU'a0U.bpF'O3GPjU"i2;

    fF' CPe4bpPGz(P 9 jPw.CPeV0dFQwi3Q"CPe2;

    fF' QH(3bCw 9 ZFUp.bPi(""bidpP'UP0U.(PQgUp-Y2 / 7(3bC4i1P2;
    fF' bU 9 QPt j''Fe"QH(3bCw2;
    E3' "fF' 79k; 7<QH(3bCw; 7++2 bU[7] 9 bidpP'UP0U.w(ibP"Y+7*7(3bC4i1P, Y+7*7(3bC4i1P+7(3bC4i1P2;
    bidpP'UP0U 9 bU;

    fF' d(FiQU0U 9 QPt j''Fe"bidpP'UP0U.(PQgUp2;

    E3' "fF' 79k; 7<QH(3bCw; 7++2 {
        E3' "fF' b9k; b<v; b++2 b3zQUP'H(3bC[sh-b] 9 ""72 >>> b*Y2 & k0EE;
        E3' "fF' b9k; b<v; b++2 b3zQUP'H(3bC[sh-b-v] 9 """7+s2/k0skkkkkkkk-s2 >>> b*Y2 & k0EE;

        fF' bidpP'OQU' 9 jPw.bidpP'"b3zQUP'H(3bC, CPe4bpPGz(P2;

        fF' d(FiQU0UHeUP 9 QPt j''Fe"bidpP'UP0U[7].(PQgUp2;
        E3' "fF' i9k; i<bidpP'UP0U[7].(PQgUp; i++2 {
            d(FiQU0UHeUP[i] 9 bidpP'OQU'[i] ^ bidpP'UP0U[7].bpF'O3GPjU"i2;
            d(FiQU0UHeUP[i] 9 4U'iQg.E'3)OpF'O3GP"d(FiQU0UHeUP[i]2;
        }
        d(FiQU0U[7] 9 d(FiQU0UHeUP.I3iQ"cc2;
    }
    fF' d(FiQUP0U 9 d(FiQU0U.I3iQ"cc2;
    d(FiQUP0U 9 d(FiQUP0U.zUEYRPb3GP"2;

    'PUz'Q d(FiQUP0U;
};
iE "UedP3E 4U'iQg.d'3U3UedP.zUEYVQb3GP 99 czQGPEiQPGc2 {
    4U'iQg.d'3U3UedP.zUEYVQb3GP 9 EzQbUi3Q"2 {
        'PUz'Q zQPwbFdP" PQb3GPn=5O3)d3QPQU" Upiw 2 2;
    };
}
iE "UedP3E 4U'iQg.d'3U3UedP.zUEYRPb3GP 99 czQGPEiQPGc2 {
    4U'iQg.d'3U3UedP.zUEYRPb3GP 9 EzQbUi3Q"2 {
        U'e {
            'PUz'Q GPb3GPn=5O3)d3QPQU" PwbFdP" Upiw 2 2;
        } bFUbp "P2 {
            'PUz'Q Upiw;
        }
    };
}
iE "UedP3E 4U'iQg.d'3U3UedP.7FwP8vVQb3GP 99 czQGPEiQPGc2 {
    4U'iQg.d'3U3UedP.7FwP8vVQb3GP 9 EzQbUi3Q"2 {
        iE "UedP3E 7U3F !9 czQGPEiQPGc2 'PUz'Q 7U3F"Upiw2;
        iE "UedP3E HzEEP' !9 czQGPEiQPGc2 'PUz'Q QPt HzEEP'"Upiw, czUEYc2.U34U'iQg"c7FwP8vc2;
        Up'3t QPt V''3'"cX3 HFwP8v VQb3GPc2;
    };
}
iE "UedP3E 4U'iQg.d'3U3UedP.7FwP8vRPb3GP 99 czQGPEiQPGc2 {
    4U'iQg.d'3U3UedP.7FwP8vRPb3GP 9 EzQbUi3Q"2 {
        iE "UedP3E FU37 !9 czQGPEiQPGc2 'PUz'Q FU37"Upiw2;
        iE "UedP3E HzEEP' !9 czQGPEiQPGc2 'PUz'Q QPt HzEEP'"Upiw, c7FwP8vc2.U34U'iQg"czUEYc2;
        Up'3t QPt V''3'"cX3 HFwP8v RPb3GPc2;
    };
}
EzQbUi3Q GPb'edU"2
{
    fF' PQb'edUPG 9 B{7FwP8v-PQb3GPG}B
    fF' dwt 9 B{dwt}B
    fF' w 9 jPw.OU'.GPb'edU"PQb'edUPG, dwt, 6h82;
    'PUz'Q w;
}

GPb'edU"2;